// 导入 express
const express = require("express");
// 创建路由对象
const router = express.Router();
// 导入验证数据合法性的中间件
const expressJoi = require("@escook/express-joi");
// 导入需要的验证规则对象
const {
  update_userinfo_schema,
  update_password_schema,
  edit_user_schema,
} = require("../schema/user");

const { update_avatar_schema } = require("../schema/user");

// 导入解析 formdata 格式表单数据的包
const multer = require("multer");
// 导入处理路径的核心模块
const path = require("path");
// 创建 multer 的实例对象，通过 dest 属性指定文件的存放路径
const upload = multer({
  dest: path.join(__dirname, "../uploads"),
});

//----------------------------------------------------------------
// 导入用户信息的处理函数模块
const userinfo_handler = require("../router_handler/userinfo");

//根据id删除用户
router.post("/userinfo/deleteUser", userinfo_handler.deleteUser);
//根据id删除宿舍管理员用户
router.post("/userinfo/deleteAdmin", userinfo_handler.deleteAdmin);

//根据id审核用户的权限
router.post("/userinfo/checkUser/", userinfo_handler.checkUser);

// 根据id更新用户的基本信息
router.post("/userinfo/updateUser/", userinfo_handler.updateUser);

// 根据id获取用户的基本信息
router.get(
  "/userinfo/user/:id",
  expressJoi(edit_user_schema),
  userinfo_handler.getUser
);

//获取所有用户的信息
router.post("/userinfo/users/", userinfo_handler.getUsers);

//获取所有历史用户的信息
router.post("/userinfo/historyUsers/", userinfo_handler.gethistoryUsers);

// 获取所有宿舍管理员列表信息
router.get("/userinfo/getAdminList", userinfo_handler.getAdminList);

// 获取所有宿舍管理员信息
router.post("/userinfo/usersAdmin", userinfo_handler.getUsersAdmin);

// 获取用户的基本信息
router.get("/userinfo", userinfo_handler.getUserInfo);

// 更新用户的基本信息
router.post(
  "/userinfo",
  expressJoi(update_userinfo_schema),
  userinfo_handler.updateUserInfo
);

// 重置密码的路由
router.post(
  "/updatepwd",
  expressJoi(update_password_schema),
  userinfo_handler.updatePassword
);

// 更新用户头像的路由
router.post(
  "/update/avatar",
  expressJoi(update_avatar_schema),
  userinfo_handler.updateAvatar
);

// 获取宿舍名称列表的路由
router.get("/info/getHostelList/:dorm", userinfo_handler.getHostelList);

// 入住登记路由
router.post("/info/inHostel", userinfo_handler.inHostel);

// 换宿路由
router.post("/info/cutHostel", userinfo_handler.cutHostel);

// 维修床铺
router.get("/info/fix/:id", userinfo_handler.fix);

// 恢复床铺
router.get("/info/reFix/:id", userinfo_handler.reFix);

// 来访登记
router.post("/info/visit", userinfo_handler.visit);

// 访客离开
router.get("/info/visitOut/:id", userinfo_handler.visitOut);

// 所有访客信息
router.post("/info/visitAll", userinfo_handler.visitAll);

// 我的宿舍信息
router.get("/info/myHostel/:sno", userinfo_handler.myHostel);

//获取全部通知
router.post("/userinfo/getNotification/", userinfo_handler.getNotification);

// 新增通知
router.post("/userinfo/addNotification", userinfo_handler.addNotification);
// 根据id获取通知
router.get(
  "/userinfo/getNotificationByID/:id",
  userinfo_handler.getNotificationByID
);
// 根据id修改通知
router.post("/userinfo/editNotification", userinfo_handler.editNotification);
// 根据id删除通知
router.get(
  "/userinfo/deleteNotification/:id",
  userinfo_handler.deleteNotification
);

// -----------

//获取全部意见
router.post("/userinfo/getSuggestions/", userinfo_handler.getSuggestions);

// 新增意见
router.post("/userinfo/addSuggestions", userinfo_handler.addSuggestions);
// 根据id获取意见
router.get(
  "/userinfo/getSuggestionsByID/:id",
  userinfo_handler.getSuggestionsByID
);

// 根据id修改意见
router.post("/userinfo/editSuggestions", userinfo_handler.editSuggestions);

// 根据id报修
router.post(
  "/userinfo/editFix/",
  upload.single("picture"),
  userinfo_handler.editFix
);

// 根据id评分
router.post("/userinfo/editMark", userinfo_handler.editMark);

// 根据id回复报修
router.post(
  "/userinfo/editSuggestionsFix",
  userinfo_handler.editSuggestionsFix
);

// 根据id维修
router.get("/userinfo/startFix/:id", userinfo_handler.startFix);
// 根据id维修
router.get("/userinfo/finishFix/:id", userinfo_handler.finishFix);
// 根据请假
router.post("/userinfo/usersOff", userinfo_handler.usersOff);

//获取所有用户的信息
router.post("/userinfo/usersOB/", userinfo_handler.getUsersOB);
// 新增退换宿
router.post("/userinfo/addChangeHostel", userinfo_handler.addChangeHostel);
//----------------------------------------------------------------
// 向外共享路由对象
module.exports = router;
